import axios from 'axios';
import router from '@/router'
// 创建 Axios 实例
const service = axios.create({
    baseURL: 'http://localhost:8081/api/', // 从环境变量读取接口基础路径
    timeout: 5000, // 请求超时时间
});


// 请求拦截器：在发送请求前添加 token
// 请求在到达服务器之前，先会调用use中的这个回调函数来添加请求头信息
service.interceptors.request.use(
    (config) => {
        // console.log("utils-request->拦截请求");
        // 从本地存储（如 localStorage/sessionStorage）获取 token
        const token = window.sessionStorage.getItem("token"); // 或 localStorage
        // console.log("utils-request->拦截添加token=", token);
        // 如果 token 存在，添加到请求头
        if (token) {
            config.headers['Authorization'] = `Bearer ${token}`; // Bearer 方案（常见）
            // 或直接传递：
            // config.headers['token'] = token;
        }
        return config;
    },
    (error) => {
        // 请求错误处理
        // 若不用下面这行，请求会 静默失败，不会触发调用方的 catch，导致代码难以调试。
        return Promise.reject(error);
    }
);

// 响应拦截器：统一处理响应和错误
service.interceptors.response.use(
    (response) => {
        if (response.config.responseType === 'blob') {
            return response; // 不处理 blob 响应
        }
        if (!response.data.success) {
            // console.log("utils-request->拦截，响应失败response.data=", response.data.code)
            if (response.data.code == "602" || response.data.code == "305") {
                window.sessionStorage.clear();
                //跳转到 /login 组件
                router.replace('/login');
            }
            return Promise.reject(response.data);
        }
        // 对响应数据做统一处理（如提取 data 字段）
        // console.log("utils-request->拦截，响应成功response.data=", response.data)
        return response.data;
    },
    (error) => {
        const errMsg = error.response?.data?.msg || error.message;
        console.log("响应拦截错误信息-》", error.response.data)
        return Promise.reject({msg: errMsg});
    }
);

export default service; // 导出配置好的 Axios 实例